1. Field of the Invention
The present invention relates to networked computer systems and, in particular, to testing software-based servers.
2. Description of Related Art
Today's networked computing environments include servers that provide various services to clients over a network. Many of these servers handle client requests as transactions. Database and network traffic for such servers are continually increasing. Accordingly, the number, rate, and complexity of the transactions to be handled by servers are also increasing. Furthermore, user expectations regarding reliability and fault-tolerance are also increasing, leading to even more complexity within modern servers.
Given the large volume of transactions expected to be handled by modern servers, testing the ability of a server to handle its expected workload is critical to ensure that the server will operate properly when deployed. Furthermore, testing after deployment may also be necessary to verify that the server continues to function properly over time, after modifications, and/or in light of changing operating circumstances. Testing may also be used to tune the configuration of the hardware and/or software in a system to achieve higher performance. Some tests may also be used in performance benchmarking.
Testing the capabilities of servers that will provide services to a large number of clients is often difficult, especially as the expected workload of such servers continues to increase. One difficulty arises due to the challenges of realistically simulating a large number of users (thousands, millions, or more) that each initiate one or more server transactions in a cost effective way. For example, while a multi-threaded process may be used to simulate multiple clients, it is typically not realistic to test a server with a single process. However, coordination of multiple test processes, which may each be executing multiple iterations of a test, in such way that test results are easily collected is often undesirably difficult. Additionally, it is often desirable to provide scalable testing facilities in order to test a server using differing numbers of clients. Yet another difficulty arises when trying to provide flexible testing capabilities so that the same testing framework may be reused with various different tests and/or different types of applications to be tested. Accordingly, improved testing capabilities are desired.